package com.hwn.datax.service.impl;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.resource.ClassPathResource;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.hwn.datax.service.ConfigService;
import org.springframework.stereotype.Service;

import java.nio.file.FileSystems;

/**
 * @author wnhuang
 * @date 2024/6/2 2:26
 */
@Service
public class ConfigServiceImpl implements ConfigService {

    private final static String CONFIG_PATH = "config.json";

    private JSONObject config;

    public ConfigServiceImpl() {
        localToStore();
    }

    /**
     * 获取配置
     *
     * @param key
     * @return
     */
    @Override
    public JSONObject getConfig(String key) {
        return config.getJSONObject(key);
    }

    @Override
    public JSONArray getConfigArr(String key) {
        return config.getJSONArray(key);
    }

    /**
     * 保存配置
     *
     * @param key
     * @param jsonStr
     */
    @Override
    public void saveConfig(String key, String jsonStr) {
        if (!JSONUtil.isTypeJSON(jsonStr)) {
            throw new RuntimeException("保存配置出错，json格式错误！");
        }
        config.set(key, JSONUtil.parse(jsonStr));
        storeToLocal();
    }


    void storeToLocal() {
        String currentDir = System.getProperty("user.dir"); // 获取当前工作目录
        String separator = FileSystems.getDefault().getSeparator(); // 获取系统文件路径分隔符
        String absolutePath = currentDir + separator + CONFIG_PATH; // 构建配置文件路径

        FileUtil.writeUtf8String(JSONUtil.toJsonStr(config, 4), absolutePath);
    }

    void localToStore() {
        String currentDir = System.getProperty("user.dir"); // 获取当前工作目录
        String separator = FileSystems.getDefault().getSeparator(); // 获取系统文件路径分隔符
        String absolutePath = currentDir + separator + CONFIG_PATH; // 构建配置文件路径

        boolean exist = FileUtil.exist(absolutePath);
        if (!exist || !JSONUtil.isTypeJSON(FileUtil.readUtf8String(absolutePath))) {
            FileUtil.touch(absolutePath);
            FileUtil.writeUtf8String(JSONUtil.toJsonStr(new JSONObject()), absolutePath);
        }
        String content = FileUtil.readUtf8String(absolutePath);
        if (JSONUtil.isTypeJSON(content)) {
            config = JSONUtil.parseObj(content);
        }
    }

    /**
     * 获取全部字典
     *
     * @return
     */
    @Override
    public JSONObject getAllConfig() {
        return config;
    }

    /**
     * 保存全部字典
     */
    @Override
    public void saveAllConfig(String jsonStr) {
        if (!JSONUtil.isTypeJSON(jsonStr)) {
            throw new RuntimeException("保存配置出错，json格式错误！");
        }
        config = JSONUtil.parseObj(jsonStr);
        storeToLocal();
    }
}
